package com.atguigu.jxc.controller;

import com.atguigu.jxc.domain.ServiceVO;
import com.atguigu.jxc.domain.SuccessCode;
import com.atguigu.jxc.entity.Goods;
import com.atguigu.jxc.entity.GoodsTypeResponseVo;
import com.atguigu.jxc.service.GoodsService;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.shiro.authz.annotation.Logical;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @description 商品信息Controller
 */
@RestController
public class GoodsController {

    @Autowired
    private GoodsService goodsService;

    ObjectMapper objectMapper = new ObjectMapper();

    /**
     * 分页查询商品库存信息
     * @param page 当前页
     * @param rows 每页显示条数
     * @param codeOrName 商品编码或名称
     * @param goodsTypeId 商品类别ID
     * @return
     * http://localhost:8080/goods/listInventory
     * post
     */
    @PostMapping("/goods/listInventory")
    @ResponseBody
    public Map<String, Object> listGoodsInventory(Integer page,Integer rows,String codeOrName,Integer goodsTypeId ){

        return goodsService.list( page, rows, codeOrName, goodsTypeId) ;

    }




    /**
     * 分页查询商品信息
     * @param page 当前页
     * @param rows 每页显示条数
     * @param goodsName 商品名称
     * @param goodsTypeId 商品类别ID
     * @return
     */


    /**
     * 生成商品编码
     * @return
     */
    @RequestMapping("/getCode")
    @RequiresPermissions(value = "商品管理")
    public ServiceVO getCode() {
        return goodsService.getCode();
    }

    /**
     * 添加或修改商品信息
     * @param goods 商品信息实体
     * @return
     */

    /**
     * 删除商品信息
     * @param goodsId 商品ID
     * @return

     */


    /**
     * 分页查询无库存商品信息
     * @param page 当前页
     * @param rows 每页显示条数
     * @param nameOrCode 商品名称或商品编码
     * @return
     */


    /**
     * 分页查询有库存商品信息
     * @param page 当前页
     * @param rows 每页显示条数
     * @param nameOrCode 商品名称或商品编码
     * @return
     */


    /**
     * 添加商品期初库存
     * @param goodsId 商品ID
     * @param inventoryQuantity 库存
     * @param purchasingPrice 成本价
     * @return
     */

    /**
     * 删除商品库存
     * @param goodsId 商品ID
     * @return
     */

    /**
     * 查询库存报警商品信息
     * @return
     */

    /**
     * 查询商品分类
     * 请求URL：http://localhost:8080/goodsType/loadGoodsType
     * 请求参数：无
     * 请求方式：POST
     * 返回值类型：JSON
     */
    @PostMapping("/goodsType/loadGoodsType")
    @ResponseBody
    public String listGoodsType() throws JsonProcessingException {

        List<GoodsTypeResponseVo> goodsTypeResponseVo = goodsService.listGoodsType();


        String string = objectMapper.writeValueAsString(goodsTypeResponseVo);

        return string;

    }

    /**
     * 请求URL：http://localhost:8080/unit/list
     * 请求参数：无
     * 请求方式：POST
     * 返回值类型：JSON
     * 返回值：Map<String,Object>
     * 查询所有商品单位
     */
    @PostMapping("/unit/list")
    public Map<String,Object> getGoodsUnit(){

        return goodsService.getGoodsUnit();

    }

    /**
     * 请求URL：http://localhost:8080/goods/list
     * 请求参数：Integer page, Integer rows, String goodsName, Integer goodsTypeId
     * 请求方式：POST
     * 返回值类型：JSON
     * 返回值：Map<String,Object>
     */
    @PostMapping("/goods/list")
    public Map<String,Object> getGoodsList(Integer page, Integer rows, String goodsName, Integer goodsTypeId){

        Map<String, Object> list = goodsService.list(page,rows,goodsName,goodsTypeId);

        return list;

    }

    /**
     *      * 请求URL：http://localhost:8080/goodsType/delete
     *      * 请求参数：Integer  goodsTypeId
     *      * 请求方式：POST
     *      * 返回值类型：JSON
     *      * 返回值：ServiceVO
     */
    @PostMapping("/goodsType/delete")
    public ServiceVO deleteGoodsType(Integer goodsTypeId){

        goodsService.deleteGoodsType(goodsTypeId);

        return new ServiceVO(SuccessCode.SUCCESS_CODE,SuccessCode.SUCCESS_MESS,null);

    }

}
